Модуль:Песочница/Jaguar K

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация
local p = {} 
local match = mw.ustring.match
local find = mw.ustring.find
local sub = mw.ustring.sub
local gsub = mw.ustring.gsub
local len = mw.ustring.len
local lower = mw.ustring.lower
local trim = mw.text.trim

function p.sub(frame)
local mode=frame.args[2]
local arg=frame.args[1]
local result
if mode then result=sub(arg,4,-4) else result=string.sub(arg,4,-4) end
return result
end

function p.delink(frame)
	return mw.text.killMarkers(frame.args[1])
end

function p.nbsp(frame)
	local start = mw.ustring.find(frame.args[1] or frame.args["string"], frame.args[2] or frame.args["pattern"] or '[F\194\160H]')
	return start
end

function p.hyphen(frame)
	local start =  mw.ustring.find(frame.args[1] or frame.args["string"], frame.args[2] or frame.args["pattern"] or '[F\226\128\144H]')
	return start
end

function p.space(frame)
	local start =  mw.ustring.find(frame.args[1] or frame.args["string"], frame.args[2] or frame.args["pattern"] or '[F\032H]')
	return start
end


function p.xmain(frame)
local args = frame.args or frame:getParent().args
local born = tonumber(mw.text.killMarkers(args["Возник"]))
local died = tonumber(mw.text.killMarkers(args["Вымер"]))
local flags = args.flags
 


local value
if(flags=="born22")then value = born/2.2 end
if(flags=="born-died22")then value =(born-died)/2.2 end
if(flags=="27+died")then value = 27+died/2.2 end
if(flags=="26+died")then value = 26+died/2.25 end
if(flags=="born41")then value = born*4.1 end
if(flags=="born-died41")then value = (born-died)*4.1 end
if(flags=="10+died")then value = 10+died*4.1 end
return string.format("%0.3f",tonumber(value))
end


-- {{#switch:{{Str rightc|{{{rang|}}}|1}}|а|ь|я=?а|о=?о}}
function p.ending(frame)
local args = frame.args or frame:getParent().args
local l=args.l
local rang = args.rang
local ending = sub(rang,-1)
local text=''
if(ending=="a" or ending=="ь" or ending=="я") then text="a" 
	elseif(ending=="о") then text="о" end
if(l) then text="л"..text end
return text
end

function p.dot2comma(arg)
return gsub(arg,'%.',',')
end

function p.comma2dot(arg)
return gsub(arg,',','.')
end

function p.nb(frame)
	local replace = frame.args[2]
	local arg = frame.args[1]
	if(replace) then arg=gsub(arg,' ',' ') end
	return trim(arg,'%s ')
end

function p.rep2lace(frame)
local args = frame.args or frame:getParent().args
return p.comma2dot(args[1])..p.dot2comma(args[2])
end

function p.arg(frame)
local args = frame.args or frame:getParent().args
if(args.l==nil)then return 'nil' elseif(args.l=='')then return 'empty' else return args.l end
end

function p.is(arg)
if(arg==nil or arg=='') then return 'nil' else return 'ok' end
end

function p.ist(frame) -- =p.ist({args={["test"]="2"}}) trim don't work
local args = frame.args or frame:getParent().args
return p.is(args['test'])
end

function p.ifref(frame)
		local start = "пусто"
		if (find(frame.args[1], 'ref') ~= nil) then
		start =  'текст "ref" найден'
		end
		return start
end

function p.ref(frame)
		local start =  gsub(frame.args[1], '<ref>^[*.]$', ''), text
		if start ==  frame.args[1] then text="gsub ничего не сделал" else text="gsub что-то сделал" end
		return text
end

function p.ifcomm(frame)
		local start = "пусто"
		if (find(frame.args[1], '{{comment|') ~= nil) then
		start =  '"comment" найден'
		end
		return start
end

function p.quot(frame)
		local start =  gsub(frame.args[1], "'", '')
		return start
end


--creates a frame object that cannot access any of the parent's args
--unless a table containing a list keys of not to inherit is provided
function disinherit(frame, onlyTheseKeys)
	local parent = frame or frame:getParent() 
	local orphan = parent:newChild{}
	orphan.getParent = parent.getParent --returns nil
	orphan.args = {}
	if onlyTheseKeys then
		local family = {parent, frame}
		for f = 1, 2 do
			for k, v in pairs(family[f] and family[f].args or {}) do
				orphan.args[k] = orphan.args[k] or v
			end
		end
		parent.args = mw.clone(orphan.args)
		setmetatable(orphan.args, nil)
		for _, k in ipairs(onlyTheseKeys) do
			rawset(orphan.args, k, nil)
		end
	end
	return orphan, parent
end

function p.get(frame, arg, passArgs)
	local orphan, frame = disinherit(frame, passArgs and {arg or 1})
	local code, noWiki, preserve = frame.args[arg or 1] or ''
	if code:match'nowiki' then
		code = mw.text.unstripNoWiki(code)
			:gsub('&lt;', '<')
			:gsub('&gt;', '>')
			:gsub('&#125;%-', '}-')
			:gsub('%-&#123;', '-{')
	end
	return {
		output = orphan:preprocess(code),
		frame = frame,
		tag = tag,
		sep = sep
	}
end

function p.tables(frame, demoTable)
	local show = demoTable or p.get(frame)
	local args = show.frame.args
    return string.format('%s', show.output);
	end


function p.main( frame )
local args=frame:getParent().args a=args[1] or "" b="|азербайджанка|башкирка|белоруска|марийка|чувашка|немка|гречанка|англичанка|испанка|эстонка|басконка|финка|француженка|еврейка|армянка|японка|грузинка|казашка|лезгинка|литовка|латышка|полячка|румынка|цыганка|русская|славянка|сербка|татарка|украинка|американка|узбечка|китаянка|аргынка|казачка|крымская татарка|" c="" r="|" d=""
local x=args["гендер"] or args["gender"] or args["sex"] or args["пол"] or args[2] or ""
if x~="" then d=frame:expandTemplate{ title = 'gender switch', args = { x, '1', '0' } } end
if a~="" then if mw.ustring.find(b, r..mw.ustring.lower(a)..r,_, plain) then c="itsstring" end end
if d=="1" then c="itsstring" end
return c
end

function p.lang(frame)
	local a1=frame.args[1] or frame:getParent().args[1];
	local a2=frame.args[2] or frame:getParent().args[2];
	return "<span lang=\""..a1.."\" xml:lang=\""..a1.."\">"..a2.."</span>"
end


function p.ucf(frame)
	local args=frame.args[1] or frame:getParent().args[1];
	return "{{{{{ucfirst:"..args.."}}|{{{"..args.."}}}}}}"
end

function p.bgcolor( frame )
local args=frame:getParent().args a=args["<div letmoduledeterminethistemplate style"] c="" mw.log(a) --frame:getParent().args or 
if a~=nil  then c="it has color" end
return c
end



function p.bgcolor2( frame )
local args=frame.args a=args["<div letmoduledeterminethistemplate style"] c="" mw.log(a) --frame:getParent().args or 
if a~=nil  then c="it has color" end
return c
end

function p.bgcolor3( frame )
local args=frame.args a=args["<div letmoduledeterminethistemplate"] c="" mw.log(a) --frame:getParent().args or 
if a~=nil  then c="it has color" end
return c
end

function p.adj(frame)
	local title = mw.title.getCurrentTitle().text -- frame:getTitle()
	local pattern = ''
	for k, v in pairs(frame.args) do
		pattern = '^' .. v .. '%s+«?(.-)»?([^»]-)$'
		-- mw.log('pattern = "' .. pattern .. '"')
		local key = mw.ustring.gsub(title, pattern, '%1%2', 1) 
		if key ~= title then
						-- mw.log('key = "' .. key .. '"')
			return key
		end
	end
	return "title"
end

function p.main3( frame )
local args=frame:getParent().args a=args[1] or nil b="|азербайджанка|башкирка|белоруска|марийка|чувашка|немка|гречанка|англичанка|испанка|эстонка|басконка|финка|француженка|еврейка|армянка|японка|грузинка|казашка|лезгинка|литовка|латышка|полячка|румынка|цыганка|русская|славянка|сербка|татарка|украинка|американка|узбечка|китаянка|аргынка|казачка|крымская татарка|" c="" r="|" d=""
local x=args["гендер"] or args["gender"] or args["sex"] or args["пол"] or args[2] or nil
if x then d=frame:expandTemplate{ title = 'gender switch', args = { x, '1', '0' } } end
if a then if mw.ustring.find(b, r..mw.ustring.lower(a)..r,_, plain) then c="itsstring" end end
if d=="1" then c="itsstring" end
return c
end

function p.ret( frame )
local a="~"..frame.args[1].."~"..frame.args[2].."~"..frame.args[3].."~"..frame.args[4].."~"..frame.args[5].."~"..frame.args[6].."~"..frame.args[7].."~";
return a
end

function p.ret4( frame )
return frame:getParent().args[1] or frame.args[1];
end

function p.ret2( frame )
local a=frame.args[1] 
	local len = mw.ustring.len( a );
	local str = mw.ustring.sub( a, 3, len );
return str;
end

function p.gender( frame )
return frame:expandTemplate{ title = 'gender switch', args = { frame.args[1], '1', '0' } }
end

function p.flag( frame )
local d="de немец немка" dd="Coat of arms of Germany.svg" f=""
if mw.ustring.find(d, frame.args[1],_, plain) then f=dd end
return f
end

function p.wiki( frame )
local d="de немец немка" dd="Немцы|" f=""
if mw.ustring.find(d, frame.args[1],_, plain) then f=dd end
if p.main(frame) == "" then f=f.."немец" else  f=f.."немка" end
return f 
end
 
function p.indent( frame )
local d="</dd></dl>" f="" v= {} i=1 v[0]=d x=frame.args[1] c=tonumber(x) 
while i<33 do v[i]=v[i-1]..d i=i+1 end
if c then f=v[c-1] else f=v[#x-1] end
return f
end 

function p.subst( frame )
	return "{{subst:REVISIONUSER}}"
end

function p.date( frame )
	local x=frame.args[1] -- y=mw.language.new("ru")
	return mw.getContentLanguage():formatDate(x)
end

function p.recintro ( frame )
	return frame.args[1]..mw.getContentLanguage():formatDate('d.m.Y')..frame.args[2]
end 

function p.recintro1 ( frame )
	return mw.ustring.gsub(frame.args[1],'{{#time:d.m.Y}}',mw.getContentLanguage():formatDate('d.m.Y'))
end 



function p.unsigned (frame)
	local arg1 = mw.ustring.gsub(frame:getParent().args[1] or '', '\226\128\142', '') -- invisible &lrm; mark
	local arg2 = mw.ustring.gsub(frame:getParent().args[2] or '', '\226\128\142', '') -- invisible &lrm; mark
	
	local agent, moment
	if arg2 == nil or arg2 == '' then
		agent = arg1
	else
		if mw.ustring.match(arg1, '[0-9]+ [а-я]+ 20[0-9]+') then
			agent = arg2
			moment = arg1
		else
			agent = arg1
			moment = arg2
		end
		moment = mw.text.trim(moment)		
	end
	agent = mw.text.trim(agent)
	if agent == nil or agent == '' then
		return '<span class="error">Unsigned: введены некорректные параметры</span>'
	end
	
	local res = '<small class="autosigned"> —&nbsp;\'\'Эта [[ВП:Подписывайтесь на страницах обсуждения|реплика]] добавлена '
	
--	if mw.ustring.match(agent, '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$')
--			or mw.ustring.match(agent, '^[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+$') 
--			or mw.ustring.match(agent, '^[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+:[0-9a-fA-F]+$') then
if true then res = res .. 'с IP [[Special:Contributions/' .. agent .. '|' .. agent .. ']] ({{фиттс|User talk:' .. agent .. '|о}})'
	else
		res = res .. 'участником [[User:' .. agent .. '|' .. agent .. ']] ({{фиттс|User talk:'
			.. agent .. '|о}} • {{фиттс|Special:Contributions/' .. agent .. '|в}})'
	end
	
	if moment ~= nil and moment ~= '' then
		if not mw.ustring.match(moment, '(UTC)') then
			moment = moment .. '&#32;(UTC)'-- два пробела ломают «Инструменты обсуждения»
		end
		res = res .. ' ' .. moment 
	end
	
	res = res .. '\'\'</small>'
	return frame:preprocess(res)
end

return p